package loja.model.compra;

import java.io.Serializable;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;

@Entity
@Table(name = "compra")
public class Compra implements Serializable {

	private static final long serialVersionUID = 1L;

	@Id
	@GeneratedValue
	@Column(name = "id_compra")
	private Long idCompra;
	@Temporal(TemporalType.DATE)
	private Calendar data;
	private String fornecedor;
	@Column(precision = 10, scale = 4)
	private BigDecimal valor = BigDecimal.ZERO;
	@Column(precision = 10, scale = 4)
	private BigDecimal desconto = BigDecimal.ZERO;
	@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.EAGER)
	private List<ItemCompra> itensCompra = new ArrayList<>();

	public Compra() {
	}

	public Long getIdCompra() {
		return idCompra;
	}

	public void setIdCompra(Long idCompra) {
		this.idCompra = idCompra;
	}

	public Calendar getData() {
		return data;
	}

	public void setData(Calendar data) {
		this.data = data;
	}

	public String getFornecedor() {
		return fornecedor;
	}

	public void setFornecedor(String fornecedor) {
		this.fornecedor = fornecedor;
	}

	public BigDecimal getValor() {
		BigDecimal soma = BigDecimal.ZERO;
		for (ItemCompra itemCompra : itensCompra) {
			BigDecimal subtotal = BigDecimal.ZERO;
			subtotal = itemCompra.getPreco().multiply(
					new BigDecimal(itemCompra.getQuantidade()));
			soma = soma.add(subtotal);
		}

		soma = soma.subtract(desconto);
		this.valor = soma;

		return valor;
	}

	public void setValor(BigDecimal valor) {
		this.valor = valor;
	}

	public BigDecimal getDesconto() {
		return desconto;
	}

	public void setDesconto(BigDecimal desconto) {
		this.desconto = desconto;
	}

	public List<ItemCompra> getItensCompra() {
		return itensCompra;
	}

	public void setItensCompra(List<ItemCompra> itensCompra) {
		this.itensCompra = itensCompra;
	}

}
